package cn.com.guanying.javacore.v11.common.observer;




/**
 * 有事件需要激发的模块可以继承这个类<br/>
 * 改写和省略了Observable的一些方法, 这样一定层度上避免了方法名重名(不期望的重写)
 * 
 * @author yangentao
 * 
 */
public class SimpleObservable {
	private final Observable observers = new Observable();

	/**
	 * 可以通过这个方法是用Observable的其他被省略的方法, 如getListenerCount/hasListener等
	 * 
	 * @return
	 */
	protected Observable getListeners() {
		return observers;
	}

	public void setListener(int eventId, Observer listener) {
		observers.setListener(eventId, listener);
	}

	public void addListener(Observer listener, int... eventIds) {
		for (int id : eventIds) {
			observers.addListener(id, listener);
		}
	}

	public void removeListener(Observer listener, int... eventIds) {
		for (int id : eventIds) {
			observers.remove(id, listener);
		}
	}

	public void removeListener(Observer observer) {
		observers.remove(observer);
	}

	public void clearListeners() {
		observers.clear();
	}

	/**
	 * 触发一个事件（通知观察者某个事件发生了）
	 * 
	 * @param sender
	 *            事件源，一般使用this
	 * @param eventId
	 *            事件类型
	 * @param args
	 *            事件相关数据
	 */
	public void notify(Object sender, int eventId, Object... args) {
		observers.notify(sender, eventId, args);
	}

	/**
	 * 触发一个事件（通知观察者某个事件发生了）
	 * 
	 * @param eventId
	 *            事件类型
	 * @param args
	 *            事件相关数据
	 */
	public void notify(int eventId, Object... args) {
		observers.notify(this, eventId, args);
	}
}
